#include <iostream>
#include <queue>
#include <unordered_map>
#include <forward_list>
using namespace std;
const int N = 100010;
// 存图的邻接表
forward_list<int> h[N];
// 判断节点是否已经走过
unordered_map<int, bool> c;
// 寻最短路用到的距离数组
unordered_map<int, int> d;
int n, m;
void add(int a, int b)
{
    h[a].push_front(b);
}
int bfs(int start, int end)
{
    // 用队列模拟一步一步的走
    queue<int> q;
    q.push(start);
    // 初始化初始节点的状态
    d[start] = 0;
    c[start] = true;
    while (!q.empty())
    {
        int cur = q.front();
        q.pop();
        for (auto e : h[cur])
        {
            if (!c[e])
            {
                c[e] = true;
                d[e] = d[cur] + 1;
                q.push(e);
            }
        }
    }

    return d.count(end) ? d[end] : -1;
}
int main()
{
    cin >> n >> m;
    while (m--)
    {
        int a, b;
        cin >> a >> b;
        add(a, b);
    }
    cout << bfs(1, n);
    return 0;
}

// 链接：https://www.acwing.com/activity/content/code/content/8260558/
// 来源：AcWing
